package com.hongawen.channel;

import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;

import static com.hongawen.channel.utils.ByteBufferUtil.debugAll;

/**
 * @author hongawen
 * @version 1.0
 * @data 2025/4/23 18:55
 */
public class StickyPackageTest {


    /**
     * 没有网络通信，模拟两个buffer粘包的情况
     * 下面2个buffer中的数据存在黏包和半包的情况
     * @param args .
     */
    public static void main(String[] args) {
        ByteBuffer source = ByteBuffer.allocate(32);
        source.put("hello world\ni'm zhangshan\nho".getBytes());
        splitPackage(source);
        source.put("w are you\nla".getBytes());
        splitPackage(source);
    }

    /**
     * 按特殊字符\n拆包，并输出
     * @param source 包数据
     */
    private static void splitPackage(ByteBuffer source) {
        // 切换读模式
        source.flip();
        for (int i = 0; i < source.limit(); i++) {
            if(source.get(i) == '\n'){
                int length = i+1 - source.position();
                ByteBuffer target = ByteBuffer.allocate(length);
                for (int j = 0; j < length; j++) {
                    target.put(source.get());
                }
                debugAll(target);
                target.flip();
                System.out.println(StandardCharsets.UTF_8.decode(target));
            }
        }

        // 切换写模式，并压缩缓冲数据
        source.compact();
    }

}
